package com.chaopei.day11;

import java.util.concurrent.*;

/**
 * @Author Corday 天涯
 * @Date 2022/3/17 14:41
 */
public class MyExecutor {
    //第一个线程池结束标记
    int num = 0;
    //第二个线程结束标记
    int flag=0;
    public void playPool() {
        //创建线程池服务对象,有固定大小
        ExecutorService es1 = Executors.newFixedThreadPool(3);
        //创建线程池对象,带有计划任务与大小
        ScheduledExecutorService es2 = Executors.newScheduledThreadPool(2);
        //1.模拟多个用户打开网页,执行完成后关闭线程池
        //创建多线程对象,并放入池中
        while (true) {
            es1.execute(new Runnable() {
                @Override
                public void run() {
                    //执行共享的代码
                    ++num;
                    System.out.println(Thread.currentThread().getName()+"升级到:" + num + "等级");
                }
            });
            if (num > 20) {
                es1.shutdown();
                break;
            }
            //暂停一下
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }//while
        //2.实现带有定时任务的线程池功能
        TimeUnit unit = TimeUnit.SECONDS;
        //TimeUnit.HOURS
        //设置时间单元中的秒数,用于定时任务中的时间间隔数
        unit.toSeconds(3);
        while (true) {
            es2.schedule(new Runnable() {
                @Override
                public void run() {
                    ++flag;
                    System.out.println(Thread.currentThread().getName()+":延时2秒执行");
                }
            }, 2, unit);
            //关闭线程池
            if(flag>10){
                es2.shutdown();
                break;
            }
            //暂停一会
            try {
                Thread.sleep(80);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }//while2
    }//play
}

//测试一下
class TestMyExecutor {
    public static void main(String[] args) {
        new MyExecutor().playPool();
    }
}